//********************************************************************************************************
// Product Name: MapWindow.dll Alpha
// Description:  Low level interfaces that allow separate components to use objects that are defined
//               in completely independant libraries so long as they satisfy the basic interface requirements.
//********************************************************************************************************
// The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); 
// you may not use this file except in compliance with the License. You may obtain a copy of the License at 
// http://www.mozilla.org/MPL/ 
//
// Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF 
// ANY KIND, either express or implied. See the License for the specificlanguage governing rights and 
// limitations under the License. 
//
// The Original Code is MapWindow.Interfaces
//
// The Initial Developer of this Original Code is Ted Dunsford. Created in August, 2007.
// 
// Contributor(s): (Open source contributors should list themselves and their modifications here). 
//
//********************************************************************************************************
using System;
using System.Collections.Generic;
using System.Text;
using MapWindow.Geometries;
using MapWindow.Components;
using System.Drawing;
using MapWindow.Main;
using MapWindow.Drawing;

namespace MapWindow.Data
{
    /// <summary>
    /// A feature doesn't need to be abstract because the geometry is generic and the other
    /// properties are all the same.  It supports IRenderable so that even if you don't 
    /// know what type of feature this is, you can still tell it to draw itself.  You won't
    /// be able to specify any drawing characteristics from this object however.
    /// </summary>
    public interface IFeature : IObject, ICloneable
    {

      
        /// <summary>
        /// Gets the datarow containing all the attributes related to this geometry
        /// </summary>
        System.Data.DataRow DataRow
        {
            get;
        }

        /// <summary>
        /// Returns a valid IBasicGeometry associated with the data elements of this feature.
        /// This will be enough geometry information to cast into a full fledged geometry
        /// that can be used in coordination with MapWindow.Tools
        /// </summary>
        IBasicGeometry BasicGeometry
        {
            get;
            set;
        }

        /// <summary>
        /// Gets the key that is associated with this feature.  This returns -1 if
        /// this feature is not a member of a feature layer.
        /// </summary>
        int FID
        {
            get;
        }

       
        /// <summary>
        /// Gets a reference to the IFeatureLayer that contains this item.
        /// </summary>
        IFeatureLayer ParentFeatureLayer
        {
            get;
            set;
        }

        /// <summary>
        /// An abreviated method for discovering whether this is a point, line or polygon
        /// </summary>
        FeatureTypes FeatureType
        {
            get;
        }
   

    }
}
